#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(){
    //创建套接字
    /*
    int socket(int af, int type, int protocol);
    af:地址族 常用的有 AF_INET(IPv4 地址) 和 AF_INET6(IPv6)
    type:数据传输方式常用的有 SOCK_STREAM 和 SOCK_DGRAM
    protocol:传输协议，常用的有 IPPROTO_TCP(TCP 传输协议) 和 IPPTOTO_UDP(UDP 传输协议)
    返回值：非负描述符 – 成功，-1 - 出错
    */
    int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    //将套接字和IP、端口绑定
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
    serv_addr.sin_family = AF_INET;  //使用IPv4地址
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址
    serv_addr.sin_port = htons(1234);  //端口
        bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
        //接收客户端请求
        //进入监听状态，等待用户发起请求
        /*
        int listen(int sock, int backlog);
        sock:为需要进入监听状态的套接字
        backlog:为请求队列的最大长度
        */
        listen(serv_sock, 20);
        struct sockaddr_in clnt_addr;
        socklen_t clnt_addr_size = sizeof(clnt_addr);
        int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
    //向客户端发送数据
        char str[] = "Hello World!";
        write(clnt_sock, str, sizeof(str));
        printf("Message form server");

        //关闭套接字
        close(clnt_sock);
        close(serv_sock);
    return 0;
}
